package com.spzx.product.util;

import com.spzx.product.api.domain.vo.CategoryVo;

import java.util.ArrayList;
import java.util.List;

/**
 * 辅助工具类：用于构建分类树结构
 */
public class CategoryHelper {


    /**
     * 用于构建分类树结构
     * @param categoryVoList  CategoryVo对象列表数据  703条，没有组装成父子关系的数据
     * @return 组装好父子关系的数据，集合存放的是所有一级分类对象。
     */
    public static List<CategoryVo> buildTree(List<CategoryVo> categoryVoList) {
        //只放一级分类对象。其他分类对象都在children里找
        List<CategoryVo> oneCategoryList = new ArrayList<>(); //假设一级分类有10条数据。
        categoryVoList.forEach(categoryVo -> {
            if(categoryVo.getParentId() == 0){
                oneCategoryList.add(findChildren(categoryVo,categoryVoList)); //调用findChildren方法，传递是一个父亲集合分类，返回依然是这个父亲对象，但是，父对象的children属性上装满孩子分类
            }
        });
        return oneCategoryList;
    }

    /**
     * 递归  找孩子
     *      一级找二级
     *      二级找三级
     *      三级找四级  由于没有四级分类，递归退出。
     *
     * @param categoryVo 父分类对象
     * @param categoryVoList 分类列表
     * @return 父分类对象
     */
    private static CategoryVo findChildren(CategoryVo categoryVo,List<CategoryVo> categoryVoList) {
        categoryVo.setChildren(new ArrayList<CategoryVo>()); //初始化children

        categoryVoList.forEach(item->{
            if(categoryVo.getId() == item.getParentId()){
                /*if (categoryVo.getChildren() == null) {
                    categoryVo.setChildren(new ArrayList<>());
                }*/
                categoryVo.getChildren().add(findChildren(item,categoryVoList));
            }
        });

        return categoryVo;
    }


}
